/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.saber.certificacao.ejbs.stateless;

import br.com.saber.certificacao.ejbs.stateless.interfaces.ObjetivoCertificacaoBeanLocal;
import br.com.saber.certificacao.modelos.Certificacao;
import br.com.saber.certificacao.modelos.ObjetivoCertificacao;
import br.com.saber.certificacao.modelos.validadores.ObjetivoCertificacaoValidador;
import br.com.saber.certificacao.modelos.validadores.interfaces.ValidadorInterface;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

/**
 *
 * @author Guilherme
 */
@Stateless
public class ObjetivoCertificacaoBean implements ObjetivoCertificacaoBeanLocal {

    @PersistenceContext(name = "jdbc/saber")
    private EntityManager manager;

    @Override
    public void createObjetivoCertificacao(ObjetivoCertificacao objetivoCertificacao) {
        ValidadorInterface<ObjetivoCertificacao, ObjetivoCertificacaoBean> validador = new ObjetivoCertificacaoValidador();
        validador.validar(objetivoCertificacao, this, null);
        if (objetivoCertificacao.getId() == null) {
            manager.persist(objetivoCertificacao);
        } else {
            manager.merge(objetivoCertificacao);
        }
        manager.flush();
    }

    @Override
    public ObjetivoCertificacao buscarObjetivoCertificacaoPorObjetivo(String objetivo) {
        Query q = this.manager.createNamedQuery("ObjetivoCertificacaoBean.buscarObjetivoCertificacaoPorObjetivo");
        q.setParameter("objetivoCertificacao", objetivo);
        try {
            return (ObjetivoCertificacao) q.getSingleResult();
        } catch (NoResultException e) {
            return null;
        }
    }

    @Override
    public List<ObjetivoCertificacao> buscarTodosObjetivos() {
        Query q = this.manager.createNamedQuery("ObjetivoCertificacaoBean.buscarTodosObjetivos");
        return q.getResultList();        
    }
    
     @Override
    public List<String> buscarObjetivosDistintos(String like, Certificacao certificacao) {
        Query q = manager.createQuery(getQueryString().replace("*", like));
        q.setParameter("certificacao", certificacao);
        return q.getResultList();
    }
 
    private String getQueryString(){
        StringBuilder query = new StringBuilder();
        query.append("Select distinct obj.objetivo From ObjetivoCertificacao obj ");
        query.append("Where obj.certificacao = :certificacao ");
        query.append("AND obj.objetivo LIKE '%*%' ");
        query.append("Order by obj.objetivo ASC");
        return query.toString();
    }
    
}
